classdef Etapa2 < handle
   properties (SetObservable) %propiedades que pueden ver los listeners
   
        fig2;
        Hfiltro2;
        bandadeinteres;
        handles;
        zerossinagrupar;
        polossinagrupar;
        singularidadesagrupadas;
        Hetapas;
        Hfin;
        plantilla;
        etapaagraficar;
        wdraw;
        Colores;
        unidades;
        ganancia;
   

   end 
   properties %propiedades que no pueden ver los listeners
      
   end 
   methods
       
       function self = Etapa2(self) %constructor
           
           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           % Initializes GUI
           
           hfig = hgload('etapa2gui.fig'); % load 'GUIDE generated' Figure.
           self.handles = guihandles(hfig); % get figure handles.
           movegui(hfig,'center')   % sets Figure position.
           self.fig2=hfig;
           set(self.fig2,'Visible','off');
           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           % GUI callbacks
           set(self.handles.noagrupados_agruparpar,'callback', @self.noagrupados_agruparpar_callback)
           set(self.handles.agrupados_desagrupar,'callback', @self.agrupados_desagrupar_callback)
           set(self.handles.noagrupados_agregarpolo,'callback', @self.noagrupados_agregarpolo_callback)
           set(self.handles.noagrupados_agregarzero,'callback', @self.noagrupados_agregarzero_callback)
           set(self.handles.noagrupados_autoagrupar,'callback', @self.noagrupados_autoagrupar_callback)
           set(self.handles.singularidadesagrupadas,'callback', @self.etapaagraficar_callback)
           set(self.handles.gananciaedit,'callback',@self.gananciaedit_callback)
           
           set(self.handles.zoom,'callback', @self.zoom_callback)
           set(self.handles.pan,'callback', @self.pan_callback)
           set(self.handles.grid,'callback', @self.grid_callback)
           set(self.handles.cursor,'callback', @self.cursor_callback)
           
           %Setea el Filtro de la 1 a la 2
           %self.singularidadesagrupadas=struct('polos',[],'zeros',[]);
           Hfin=1;
           self.etapaagraficar=1;
           
            imshow('logo.png','Parent',self.handles.logo);
           
            zoompic = imread('zoom.png');
            set(self.handles.zoom, 'CData', zoompic);
            
            panpic = imread('pan.png');
            set(self.handles.pan, 'CData', panpic);
            
            cursorpic = imread('cursor.png');
            set(self.handles.cursor, 'CData', cursorpic);
            
            gridpic = imread('grid.png');
            set(self.handles.grid, 'CData', gridpic);
            
%            set(self.handles.text9,'Visible','off');
            set(self.handles.text1,'Visible','off');
            set(self.handles.text2,'Visible','off');
            set(self.handles.text3,'Visible','off');
           
            
            self.Colores(1,:)=[1 0 0];
            self.Colores(2,:)=[0 1 0];
            self.Colores(3,:)=[0 0 1];
            self.Colores(4,:)=[0 0.5 0.5];
            self.Colores(5,:)=[0.5 0.5 0];
            self.Colores(6,:)=[0.5 0 0.5];
            self.Colores(7,:)=[0.3 0.7 0];
            self.Colores(8,:)=[0.7 0.3 0];
            self.Colores(9,:)=[0.3 0 0.7];
            self.Colores(10,:)=[0.7 0 0.3];
            self.Colores(11,:)=[0 0.3 0.7];
            self.Colores(12,:)=[0 0.7 0.3];
            self.Colores(13,:)=[0.7 0.3 0.5];
            self.Colores(14,:)=[0.3 0.7 0.5];
            self.Colores(15,:)=[0.5 0.3 0.7];
            self.Colores(16,:)=[0.5 0.7 0.3];
            self.Colores(17,:)=[0.3 0.5 0.7];
            self.Colores(18,:)=[0.7 0.5 0.3];
            self.Colores(19,:)=[1 1 0];
            self.Colores(20,:)=[0 1 1];
            self.Colores(21,:)=[1 0 1];
            self.Colores(22,:)=[1 0.5 0.5];
            self.Colores(23,:)=[0.5 1 0.5];
            self.Colores(24,:)=[0.5 0.5 1];
            self.Colores(25,:)=[0.5 0.5 0.5];
            self.Colores(26,:)=[0 0 0];
            self.Colores(27,:)=[0.2 0.2 0.3];
            self.Colores(28,:)=[0.4 0.4 0.2];
            self.Colores(29,:)=[0 0.9 0.6];
            self.Colores(30,:)=[0.7 0.6 0.5];
            self.Colores(31,:)=[0.1 0.3 0.5];
            
            
            
            set(self.handles.singTot,'YColor',[0 204/255 51/255]);
            
            self.ganancia=0;
            
            
       end
       
       
       
       
       function gananciaedit_callback(self, varargin)
          self.ganancia=str2double(get(self.handles.gananciaedit,'String')); 
          actualizaTransferenciasEtapa2(self);
          actualizaGraficasEtapa2(self);  
           
       end
       
       
        function zoom_callback(self, varargin)
            zoom;
        end
        function pan_callback(self, varargin)
            pan
        end
        function grid_callback(self, varargin)
            grid
        end
        function cursor_callback(self, varargin)
            datacursormode;
        end
       
       
       
       
       function etapaagraficar_callback(self, varargin)
           self.etapaagraficar=get(self.handles.singularidadesagrupadas,'Value');
           actualizaEtapaAGraficar(length(self.singularidadesagrupadas),self.handles.etapaagraficar);
           if ~isempty(self.singularidadesagrupadas)
           
            DrawAten (self.Hetapas(self.etapaagraficar), self.Colores(self.etapaagraficar,:), self.handles.bodehetapas,self.wdraw,self.unidades);     
            set(self.handles.bodehetapas,'YColor',[0 204/255 51/255]);
            set(self.handles.bodehetapas,'XColor',[0 204/255 51/255]);
           end
           
       end
       function noagrupados_autoagrupar_callback(self, varargin)
          actualizaPolosyZerosEtapa2(self);
          self.singularidadesagrupadas=ordenaPolosyZeros(self.polossinagrupar,self.zerossinagrupar);
          self.polossinagrupar=[];
          self.zerossinagrupar=[];
          actualizaTransferenciasEtapa2(self);
          actualizaGraficasEtapa2(self);  
           
       end
       
       
       
       function noagrupados_agregarzero_callback(self, varargin)
       
            if ~isempty(self.singularidadesagrupadas) && ~isempty(self.zerossinagrupar)
                singularidadseleccionada=get(self.handles.singularidadesagrupadas,'Value');
                zeroseleccionado=get(self.handles.zerosnoagrupados,'Value'); 
                
                if isempty(self.singularidadesagrupadas(singularidadseleccionada).zeros1)
                    
                    if (self.zerossinagrupar(zeroseleccionado))~=0
                        if ~isempty(self.singularidadesagrupadas(singularidadseleccionada).polos2)
                            self.singularidadesagrupadas(singularidadseleccionada).zeros1=self.zerossinagrupar(zeroseleccionado);
                            self.singularidadesagrupadas(singularidadseleccionada).zeros2=conj(self.zerossinagrupar(zeroseleccionado));
                            self.zerossinagrupar(zeroseleccionado)=[];
                        end
                    else
                        self.singularidadesagrupadas(singularidadseleccionada).zeros1=self.zerossinagrupar(zeroseleccionado);
                        self.singularidadesagrupadas(singularidadseleccionada).zeros2=[];
                        self.zerossinagrupar(zeroseleccionado)=[];
                    end
                    
                    
                else
                    if isempty(self.singularidadesagrupadas(singularidadseleccionada).zeros2) && self.zerossinagrupar(zeroseleccionado)==0 && ~isempty(self.singularidadesagrupadas(singularidadseleccionada).polos2)
                        self.singularidadesagrupadas(singularidadseleccionada).zeros1=0;
                        self.singularidadesagrupadas(singularidadseleccionada).zeros2=0;
                        self.zerossinagrupar(zeroseleccionado)=[];
                    end
                end
                    
                
                
            end
            actualizaTransferenciasEtapa2(self);
            actualizaGraficasEtapa2(self);   
       end
       
       function noagrupados_agregarpolo_callback(self, varargin)
            
            if ~isempty(self.singularidadesagrupadas) && ~isempty(self.polossinagrupar)
                singularidadseleccionada=get(self.handles.singularidadesagrupadas,'Value');
                poloseleccionado=get(self.handles.polosnoagrupados,'Value'); 
                
                if imag(self.polossinagrupar(poloseleccionado))==0 && isempty(self.singularidadesagrupadas(singularidadseleccionada).polos2)
                    self.singularidadesagrupadas(singularidadseleccionada).polos2=self.polossinagrupar(poloseleccionado);
                    self.polossinagrupar(poloseleccionado)=[];
                end
            end
            actualizaTransferenciasEtapa2(self);
            actualizaGraficasEtapa2(self);   
           
       end
       
       
       
       
       
       function noagrupados_agruparpar_callback(self, varargin) 
            aux=struct('polos1',[],'polos2',[],'zeros1',[],'zeros2',[]);
            poloseleccionado=get(self.handles.polosnoagrupados,'Value'); 
            zeroseleccionado=get(self.handles.zerosnoagrupados,'Value'); 
            if ~isempty(self.polossinagrupar)
                move=0;
                aux.polos1=self.polossinagrupar(poloseleccionado);
                if imag(aux.polos1)~=0
                    aux.polos2=conj(aux.polos1);
                else
                    aux.polos2=[];
                end
                    
                if zeroseleccionado>length(self.zerossinagrupar)
                    
                    aux.zeros1=[];
                    aux.zeros2=[];
                    move=1;
                    self.polossinagrupar(poloseleccionado)=[];

                    
                else 

                    
                    aux.zeros1=self.zerossinagrupar(zeroseleccionado);
                    if aux.zeros1==0
                        aux.zeros2=[]
                    else
                        aux.zeros2=conj(aux.zeros1);
                    end
                    
                    if imag(aux.polos1)~=0 || aux.zeros1==0
                        move=1;
                        self.zerossinagrupar(zeroseleccionado)=[];
                        self.polossinagrupar(poloseleccionado)=[];
                    end
                end
                
                
                if move
                    if isempty(self.singularidadesagrupadas)
                        self.singularidadesagrupadas=aux;                 
                    else
                        self.singularidadesagrupadas=[self.singularidadesagrupadas aux];
                    end
                end
                actualizaTransferenciasEtapa2(self);
                actualizaGraficasEtapa2(self);             
                
            end
  
       end
       
       
       function agrupados_desagrupar_callback(self, varargin) 
           if ~isempty(self.singularidadesagrupadas)
               
               singularidadseleccionada=get(self.handles.singularidadesagrupadas,'Value');
               
               
               self.polossinagrupar=[self.polossinagrupar;self.singularidadesagrupadas(singularidadseleccionada).polos1];
               
               if imag(self.singularidadesagrupadas(singularidadseleccionada).polos1)==0 && ~isempty(self.singularidadesagrupadas(singularidadseleccionada).polos2)
                    self.polossinagrupar=[self.polossinagrupar;self.singularidadesagrupadas(singularidadseleccionada).polos2];
               end
               
               if ~isempty(self.singularidadesagrupadas(singularidadseleccionada).zeros1)
                   self.zerossinagrupar=[self.zerossinagrupar;self.singularidadesagrupadas(singularidadseleccionada).zeros1];
                   if self.singularidadesagrupadas(singularidadseleccionada).zeros1==0
                       self.zerossinagrupar=[self.zerossinagrupar;self.singularidadesagrupadas(singularidadseleccionada).zeros2];
                   end
                       
               end
               self.singularidadesagrupadas(singularidadseleccionada)=[];
               
               actualizaTransferenciasEtapa2(self);
               actualizaGraficasEtapa2(self);          
               
           end
           
           
       end
       
       
       
       
       
   end
end
       
